package QianFeng07.IODemo2.Properties;

import java.io.*;
import java.util.Properties;

/**
 * Properties文件操作
 * Properties (Java.util.Properties) ，主要用于读取Java的配置文件，各种语言都有自己所支持的配置文件，
 * 配置文件中很多变量是经常改变的，这样做也是为了方便用户，让用户能够脱离程序本身去修改相关的变量设置。
 * 它提供了几个主要的方法:
 * 1、getProperty(String key),用指定的键在此属性列表中搜索属性。也就是通过参数key,得到key所对应的value。
 * 2、load(InputStream InStream),从输入流中读取属性列表(键和元素对)。通过对指定的文件(比如说上面的
 * test.properties文件)进行装载来获取该文件中的所有键-值对。以供getProperty ( String key)来搜索。
 * 3、setProperty ( String key, String value)，调用Hashtable的方法put。他通过调用基类的put方法来设置键-值对。
 * 4、store(OutputStream out, String comments)，以适合使用load方法加载到Properties 表中的格式，将此
 * Properties表中的属性列表(键和元素对)写入输出流。与load方法相反，该方法将键-值对写入到指定的文件中去。
 * 5、clear(), 清除所有装载的键-值对。该方法在基类中提供。
 **/
public class PropertiesDemo {

    public static String version = "";
    public static String username = "";
    public static String password = "";

    /*读取properties配置文件*/
    private static void readConfig() {
        Properties p = new Properties();
        try {
            /*
             * 通过当前线程的类加载器对象，来加载指定包下的配置程序
             * 文件路径不知道怎么写的时候可以利用下面方法来找到文件
             * InputStream inputStream = Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("QianFeng07/IODemo2/Properties/config.properties")
             **/
            InputStream inputStream = new FileInputStream("src/QianFeng07/IODemo2/Properties/config.properties");
            p.load(inputStream);//加载文件
            //从properties中读取数据
            version = p.getProperty("app.version");
            username = p.getProperty("db.username");
            password = p.getProperty("db.password");
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /*写入properties配置文件*/
    private static void writeConfig(String version, String username, String password) {
        Properties p = new Properties();
        p.put("app.version", version);
        p.put("db.username", username);
        p.put("db.password", password);
        try {
            OutputStream out = new FileOutputStream("src/QianFeng07/IODemo2/Properties/config.properties");
            //写文件
            p.store(out, "update config");
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        writeConfig("2", "sunshine", "123456");
        readConfig();
        System.out.println(PropertiesDemo.version);
        System.out.println(PropertiesDemo.username);
        System.out.println(PropertiesDemo.password);



    }
}
